namespace OasisCiq.Xal
{
    using System.Collections.Specialized;
    using CommonTypes;
    using External;
    using XS;

    /// <summary>
    /// Simple Geo-coordinates of the address/location
    /// </summary>
    public class LocationByCoordinates : IDataQualityGroup, IExtendedAttributes
    {
        public Latitude Latitude { get; set; }

        public Longitude Longitude { get; set; }

        /// <summary>
        /// The collection of the coordinate numeric values for
        /// latitude amd longtitude depends on the agreed position
        /// of the meridian. Declaration of the meridian is
        /// necessary as it cannot be assumed in the data
        /// </summary>
        public MeridianCodeList Meridian { get; set; }

        /// <summary>
        /// Type of code used. e.g. EPSG Code
        /// </summary>
        public CTString MeridianCodeType { get; set; }

        /// <summary>
        /// The collection of the coordinate numeric values depends
        /// on the agreed datum within which the measurement was taken.
        /// Declaration of the datum is necessary as it cannot be assumed in the data
        /// </summary>
        public DatumCodeList Datum { get; set; }

        /// <summary>
        /// Type of code used. e.g. EPSG Code, WGS-84
        /// </summary>
        public CTString DatumCodeType { get; set; }

        /// <summary>
        /// Coordinates have limited utility and application depending on
        /// the projection required for visualisation in a map. Declaration of
        /// projection is necessary as it cannot be assumed in data
        /// </summary>
        public ProjectionCodeList Projection { get; set; }

        /// <summary>
        /// Type of code used. e.g. EPSG Code
        /// </summary>
        public CTString ProjectionCodeType { get; set; }

        public DataQualityTypeList DataQualityType { get; set; }

        public XSDateTime ValidFrom { get; set; }

        public XSDateTime ValidTo { get; set; }

        public NameValueCollection ExtendedAttributes { get; set; }
    }
}